home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / xml / SchemaWriter.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  8.6 KB  |  276 lines

  1. package com.extensibility.xml;
  2.  
  3. import java.io.StringWriter;
  4. import java.io.Writer;
  5. import java.util.Date;
  6. import java.util.Enumeration;
  7. import java.util.Hashtable;
  8. import java.util.ResourceBundle;
  9. import java.util.Vector;
  10.  
  11. public abstract class SchemaWriter implements ExportInterface {
  12.    boolean previewing;
  13.    boolean showErrors;
  14.    static ResourceBundle resourceBundle;
  15.    NOPProxy nopProxy = new NOPProxy((SchemaWriter)null);
  16.    PIProxy piProxy = new PIProxy(this);
  17.    Hashtable prefixes = new Hashtable();
  18.    SchemaIntf schema;
  19.    URI uri;
  20.  
  21.    public static void setResources(ResourceBundle var0) {
  22.       resourceBundle = var0;
  23.    }
  24.  
  25.    public SchemaWriter(SchemaIntf var1, URI var2) {
  26.       this.schema = var1;
  27.       this.showErrors = var1.getShowErrors();
  28.       this.setURI(var2);
  29.    }
  30.  
  31.    public void writeDocument(Writer var1) {
  32.       this.setPreviewing(false);
  33.       SXE var2 = new SXE(var1);
  34.       var2.writeHeader("1.0", this.schema.getEncoding());
  35.       this.writeProlog(var2);
  36.       this.writeValidatedBy(var2);
  37.       this.writeHeader(var2);
  38.       if (this.schema.getFlavor().isSupported(Class.forName("com.extensibility.xml.NamespaceDeclaration"))) {
  39.          this.writeNamespaces(var2, this.schema.getDeclarations(this.uri, Class.forName("com.extensibility.xml.NamespaceDeclaration")));
  40.       }
  41.  
  42.       if (this.showErrors) {
  43.          this.writeParserErrors(var2);
  44.       }
  45.  
  46.       if (this.schema.getFlavor() instanceof ExtraMetaDataUIIntf) {
  47.          String[] var3 = ((ExtraMetaDataUIIntf)this.schema.getFlavor()).getNamespaces();
  48.          int var4 = 0;
  49.  
  50.          while(var4 < var3.length) {
  51.             String var5 = var3[var4++];
  52.             String var6 = var3[var4++];
  53.             if (this.schema.getNamedDeclaration(var5, Class.forName("com.extensibility.xml.NamespaceDeclaration")) == null) {
  54.                var2.writeLineBreak();
  55.                var2.writeAttr(String.valueOf("xmlns:").concat(String.valueOf(var5)), var6);
  56.             }
  57.          }
  58.       }
  59.  
  60.       this.writeSchemaComments(var2);
  61.       if (this.schema.getFlavor().isSupported(Class.forName("com.extensibility.xml.ExternalSubset"))) {
  62.          this.writeIncludes(var2, this.schema.getIncludedModules(this.uri));
  63.       }
  64.  
  65.       this.writeDeclarations(var2, this.schema.getDeclarations(this.uri, true));
  66.       var2.flush();
  67.    }
  68.  
  69.    public String getSourcePreview(BaseDeclaration var1) {
  70.       this.setPreviewing(true);
  71.       StringWriter var2 = new StringWriter();
  72.       SXE var3 = new SXE(var2);
  73.       this.createProxy(var1).write(var3, false);
  74.       var3.flush();
  75.       return var2.toString();
  76.    }
  77.  
  78.    protected String getPrefix(URI var1) {
  79.       return (String)this.prefixes.get(var1);
  80.    }
  81.  
  82.    protected void setURI(URI var1) {
  83.       this.uri = var1;
  84.       Enumeration var2 = this.schema.getIncludedModules(var1);
  85.  
  86.       while(var2.hasMoreElements()) {
  87.          ExternalSubset var3 = (ExternalSubset)var2.nextElement();
  88.          URI var4 = var3.getSystemURI();
  89.          int var5 = 2;
  90.          String var6 = ((BaseDeclaration)var3).getName();
  91.  
  92.          String var7;
  93.          for(var7 = var6; this.prefixes.contains(var7); var7 = String.valueOf(var6).concat(String.valueOf(var5++))) {
  94.          }
  95.  
  96.          this.prefixes.put(var4, var7);
  97.       }
  98.  
  99.    }
  100.  
  101.    protected DeclWriterProxyIntf createProxy(ElementDeclaration var1) {
  102.       return this.nopProxy;
  103.    }
  104.  
  105.    protected DeclWriterProxyIntf createProxy(AttributeDeclaration var1) {
  106.       return this.nopProxy;
  107.    }
  108.  
  109.    protected DeclWriterProxyIntf createProxy(DataTypeDeclaration var1) {
  110.       return this.nopProxy;
  111.    }
  112.  
  113.    protected DeclWriterProxyIntf createProxy(GeneralEntityDeclaration var1) {
  114.       return this.nopProxy;
  115.    }
  116.  
  117.    protected DeclWriterProxyIntf createProxy(ParameterEntityDeclaration var1) {
  118.       return this.nopProxy;
  119.    }
  120.  
  121.    protected DeclWriterProxyIntf createProxy(NotationDeclaration var1) {
  122.       return this.nopProxy;
  123.    }
  124.  
  125.    protected DeclWriterProxyIntf createProxy(NamespaceDeclaration var1) {
  126.       return this.nopProxy;
  127.    }
  128.  
  129.    protected DeclWriterProxyIntf createProxy(ExternalSubset var1) {
  130.       return this.nopProxy;
  131.    }
  132.  
  133.    protected DeclWriterProxyIntf createProxy(ProcessingInstruction var1) {
  134.       this.piProxy.setDecl(var1);
  135.       return this.piProxy;
  136.    }
  137.  
  138.    protected DeclWriterProxyIntf createProxy(BaseDeclaration var1) {
  139.       if (var1 instanceof ElementDeclaration) {
  140.          return this.createProxy((ElementDeclaration)var1);
  141.       } else if (var1 instanceof AttributeDeclaration) {
  142.          return this.createProxy((AttributeDeclaration)var1);
  143.       } else if (var1 instanceof GeneralEntityDeclaration) {
  144.          return this.createProxy((GeneralEntityDeclaration)var1);
  145.       } else if (var1 instanceof ParameterEntityDeclaration) {
  146.          return this.createProxy((ParameterEntityDeclaration)var1);
  147.       } else if (var1 instanceof NotationDeclaration) {
  148.          return this.createProxy((NotationDeclaration)var1);
  149.       } else if (var1 instanceof NamespaceDeclaration) {
  150.          return this.createProxy((NamespaceDeclaration)var1);
  151.       } else if (var1 instanceof ExternalSubset) {
  152.          return this.createProxy((ExternalSubset)var1);
  153.       } else if (var1 instanceof ProcessingInstruction) {
  154.          return this.createProxy((ProcessingInstruction)var1);
  155.       } else {
  156.          return (DeclWriterProxyIntf)(var1 instanceof DataTypeDeclaration ? this.createProxy((DataTypeDeclaration)var1) : this.nopProxy);
  157.       }
  158.    }
  159.  
  160.    protected abstract void writeHeader(SXE var1);
  161.  
  162.    public void writeProlog(SXE var1) {
  163.       Enumeration var2 = this.schema.getDeclarations(Class.forName("com.extensibility.xml.ProcessingInstruction"));
  164.  
  165.       while(var2.hasMoreElements()) {
  166.          int var3 = var1.getLength();
  167.          BaseDeclaration var4 = (BaseDeclaration)var2.nextElement();
  168.          if (var4.isInProlog()) {
  169.             this.createProxy(var4).write(var1, true);
  170.             if (var1.getLength() > var3) {
  171.                var1.writeLineBreak(true);
  172.             }
  173.          }
  174.       }
  175.  
  176.    }
  177.  
  178.    protected void writeSchemaComments(SXE var1) {
  179.    }
  180.  
  181.    protected void writeNamespaces(SXE var1, Enumeration var2) {
  182.    }
  183.  
  184.    protected void writeIncludes(SXE var1, Enumeration var2) {
  185.    }
  186.  
  187.    protected void writeDeclarations(SXE var1, Enumeration var2) {
  188.       while(var2.hasMoreElements()) {
  189.          int var3 = var1.getLength();
  190.          BaseDeclaration var4 = (BaseDeclaration)var2.nextElement();
  191.          if (this.showErrors && var4.hasErrors()) {
  192.             Vector var5 = var4.getErrors();
  193.  
  194.             for(int var6 = 0; var6 < var5.size(); ++var6) {
  195.                ParserException var7 = (ParserException)var5.elementAt(var6);
  196.                var1.writeElem("exv:decl_err", -1);
  197.                if (var7.getMessage() != null) {
  198.                   var1.writeText(var7.getMessage());
  199.                   var1.writeLineBreak();
  200.                }
  201.  
  202.                if (var7.getSource() != null) {
  203.                   var1.writeText(var7.getSource());
  204.                   var1.writeLineBreak();
  205.                }
  206.  
  207.                var1.flush("exv:decl_err");
  208.             }
  209.          }
  210.  
  211.          if (!var4.isInProlog()) {
  212.             this.createProxy(var4).write(var1, true);
  213.          }
  214.  
  215.          if (var1.getLength() > var3) {
  216.             var1.writeLineBreak(true);
  217.          }
  218.       }
  219.  
  220.    }
  221.  
  222.    protected void writeParserErrors(SXE var1) {
  223.       Vector var2 = this.schema.getParseErrors();
  224.  
  225.       for(int var4 = 0; var4 < var2.size(); ++var4) {
  226.          ParserException var5 = (ParserException)var2.elementAt(var4);
  227.          var1.writeElem("exv:parse_err", -1);
  228.          if (var5.getMessage() != null) {
  229.             var1.writeText(var5.getMessage());
  230.             var1.writeLineBreak();
  231.          }
  232.  
  233.          if (var5.getSource() != null) {
  234.             var1.writeText(var5.getSource());
  235.             var1.writeLineBreak();
  236.          }
  237.  
  238.          var1.flush("exv:parse_err");
  239.       }
  240.  
  241.    }
  242.  
  243.    protected void writeValidatedBy(SXE var1) {
  244.       if (this.schema.getPrintValidatedBy()) {
  245.          var1.writeComment(String.valueOf(" Schema validated by Extensibility on  ").concat(String.valueOf((new Date()).toString())));
  246.       }
  247.  
  248.    }
  249.  
  250.    protected String getQName(String var1, Class var2) {
  251.       BaseDeclaration var3 = this.schema.getNamedDeclaration(var1, var2);
  252.       if (var3 == null) {
  253.          return var1;
  254.       } else {
  255.          String var4 = this.getPrefix(var3.getURI());
  256.          return var4 == null ? var1 : String.valueOf(String.valueOf(var4).concat(String.valueOf(":"))).concat(String.valueOf(var1));
  257.       }
  258.    }
  259.  
  260.    protected void setPreviewing(boolean var1) {
  261.       this.previewing = var1;
  262.    }
  263.  
  264.    protected boolean isPreviewing() {
  265.       return this.previewing;
  266.    }
  267.  
  268.    protected void setShowErrors(boolean var1) {
  269.       this.showErrors = var1;
  270.    }
  271.  
  272.    protected boolean getShowErrors() {
  273.       return this.showErrors;
  274.    }
  275. }
  276.